package designModel;
// 适配器（Adapter）模式：将一个类的接口转换成客户希望的另外一个接口，使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 ☆☆☆☆☆
public class Adapter {
    public static void main(String[] args) {
        //1
        Phone phone = new Phone();
        AdapterV220 adapterV220 = new AdapterV220();
        phone.charging(adapterV220); // 给他一个 适配器adapterV220
        //2
        AdapterV2202 adapterV2202 = new AdapterV2202(adapterV220);
        phone.charging(adapterV2202);
        //3
    }
}
// 手机充电问题
// 类适配器
// 220v的电压  （被适配的类）  <<(typec接口)>>
class V220{
    int v =220;
    public int out220v(){
        System.out.println("220v电压");
        return this.v;
    }
}
// 5V的电压  <<(安卓老接口)>>
interface V5{
    public int out5v();
}
// 适配器类 （转换器） 必须要  继承V220
class AdapterV220 extends V220 implements V5{
    @Override
    public int out5v() {
        int v = this.out220v(); // 拿到 220V的电压 处理成5V的 (子类暴露了父类的方法)   <<拿到typec的口 经过处理 能插上安卓老接口>>

        int res = v/44; // 但是最终转成了5V 进行一个降压操作
        return res;
    }
}

// 手机 只能冲5V的电
class Phone{
    public void charging (V5 v5){
        // 目标是5V充电
        // 最后调的是适配器的方法
        if (v5.out5v()==5){
            System.out.println("可以冲电");
        }else{
            System.out.println("充不了");
        }
    }
}




// 对象适配器
class AdapterV2202 implements V5{
    private V220 v220;
    // 通过构造函数的方式传入v220 而不是继承
    public AdapterV2202(V220 v220){
        this.v220 = v220;
    }

    @Override
    public int out5v() {
        int v = this.v220.out220v(); // 拿到 220V的电压 (子类暴露了父类的方法)
        int res = v/44; // 但是最终转成了5V 进行一个降压操作
        return res;
    }
}

// 接口适配器 （缺省适配器模式）
